package config

import (
	"fmt"
	"gopkg.in/ini.v1"
	"os"
)

var (
	// 基础配置
	AppName   string // 应用名称
	LogLevel  string // 日志级别
	AdminPath string // 管理路径

	// Redis配置
	Redis struct {
		Ip   string
		Port string
	}

	// 微信配置
	Wechat struct {
		AppID           string
		AppSecret       string
		MchID           string
		MchKey          string
		NotifyURL       string
		RefundNotifyURL string
	}

	// MySQL配置
	Mysql struct {
		Ip       string
		Port     string
		User     string
		Password string
		Database string
	}

	// 七牛云配置
	Qiniu struct {
		AccessKey    string
		SecretKey    string
		Bucket       string
		Domain       string
		TokenExpireS uint64 // 注意：如果需要数值类型，可改为int并使用Int()方法
	}

	// 日志配置
	Logs struct {
		LogDir string
	}
)

// init函数在包加载时自动执行，初始化配置
func init() {
	// 加载配置文件（路径根据实际存放位置调整）
	config, iniErr := ini.Load("./conf/app.ini")
	if iniErr != nil {
		fmt.Printf("读取配置文件失败: %v", iniErr)
		os.Exit(1) // 配置加载失败，程序无法运行，直接退出
	}

	// 加载基础配置（无section的顶层配置）
	AppName = config.Section("").Key("app_name").String()
	LogLevel = config.Section("").Key("log_level").String()
	AdminPath = config.Section("").Key("admin_path").String()

	// 加载MySQL配置
	Mysql.Ip = config.Section("mysql").Key("ip").MustString("127.0.0.1")
	Mysql.Port = config.Section("mysql").Key("port").MustString("3306")
	Mysql.User = config.Section("mysql").Key("user").String()
	Mysql.Password = config.Section("mysql").Key("password").String()
	Mysql.Database = config.Section("mysql").Key("database").String()

	// 加载Redis配置
	Redis.Ip = config.Section("redis").Key("ip").MustString("127.0.0.1")
	Redis.Port = config.Section("redis").Key("port").MustString("6379")

	// 加载日志配置
	Logs.LogDir = config.Section("logs").Key("logDir").String()

	// 加载微信配置
	Wechat.AppID = config.Section("wechat").Key("appID").String()
	Wechat.AppSecret = config.Section("wechat").Key("appSecret").String()
	Wechat.MchID = config.Section("wechat").Key("mchID").String()
	Wechat.MchKey = config.Section("wechat").Key("mchKey").String()
	Wechat.NotifyURL = config.Section("wechat").Key("notifyURL").String()
	Wechat.RefundNotifyURL = config.Section("wechat").Key("refundNotifyURL").String()

	// 加载七牛云配置
	Qiniu.AccessKey = config.Section("qiniu").Key("accessKey").String()
	Qiniu.SecretKey = config.Section("qiniu").Key("secretKey").String()
	Qiniu.Bucket = config.Section("qiniu").Key("bucket").String()
	Qiniu.Domain = config.Section("qiniu").Key("domain").String()
	tokenExpireStr := config.Section("qiniu").Key("tokenExpireS").MustUint64(3600)
	Qiniu.TokenExpireS = tokenExpireStr
}
